package initialize

import (
	"fmt"
	"go_final/mxshop_api/user_web/global"
	userpb "go_final/mxshop_api/user_web/proto/protofile"

	_ "github.com/mbobakov/grpc-consul-resolver" // It's important
	"go.uber.org/zap"
	"google.golang.org/grpc"
)

//func InitSrvConn() {
//	// 从注册中心获取到用户服务
//	cfg := api.DefaultConfig()
//	cfg.Address = fmt.Sprintf("%s:%d", global.ServerConfig.ConsulInfo.Host, global.ServerConfig.ConsulInfo.Port)
//	apiClient, err := api.NewClient(cfg)
//	if err != nil {
//		panic(err)
//	}
//	userSrvHost := ""
//	userSrvPort := 0
//	services, err := apiClient.Agent().ServicesWithFilter(fmt.Sprintf(`Service == "%s"`,
//		global.ServerConfig.UserSrvInfo.Name))
//	if err != nil {
//		panic(err)
//	}
//
//	for _, val := range services {
//		userSrvHost = val.Address
//		userSrvPort = val.Port
//		break
//	}
//
//	if userSrvHost == "" {
//		zap.S().Fatal("[InitSrvConn] 【连接用户服务失败】")
//	}
//
//	conn, err := grpc.Dial(fmt.Sprintf("%s:%d",
//		userSrvHost,
//		userSrvPort),
//		grpc.WithInsecure())
//	if err != nil {
//		zap.S().Errorw("[GetUserList] 连接 【用户服务失败】", "msg", err.Error())
//	}
//
//	global.UserClient = userpb.NewUserClient(conn)
//}

// InitSrvConnWithLoadBalance 负载均衡拉取服务
func InitSrvConnWithLoadBalance() {
	conn, err := grpc.Dial(
		fmt.Sprintf("consul://%s:%d/%s?wait=14s",
			global.ServerConfig.ConsulInfo.Host,
			global.ServerConfig.ConsulInfo.Port,
			global.ServerConfig.UserSrvInfo.Name,
		),
		grpc.WithInsecure(),
		grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy": "round_robin"}`),
	)
	if err != nil {
		zap.S().Info("[InitSrvConnWithLoadBalance] 连接 【用户服务不可用】失败")
	}
	// defer conn.Close()

	global.UserClient = userpb.NewUserClient(conn)
}
